// 笔试强训day34:矩阵最长递增路径

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 递增路径的最大长度
     * @param matrix int整型vector<vector<>> 描述矩阵的每个数
     * @return int整型
     */
    
    void dfs(vector<vector<int>>& matrix, vector<vector<int>>& dp, int x, int y)
    {
        for(int i = 0; i < 4; i++)
        {
            int cx = x + dx[i], cy = y + dy[i];
            if(cx < 0 || cx >= n || cy < 0 || cy >= m || matrix[cx][cy] >= matrix[x][y])
                continue;
            
            if(dp[cx][cy] == 1)
                dfs(matrix, dp, cx, cy);
            dp[x][y] = max(dp[x][y], dp[cx][cy] + 1);
        }
        ans = max(ans, dp[x][y]);
    }
    
    int solve(vector<vector<int> >& matrix) {
        // write code here
        n = matrix.size();
        m = matrix[0].size();
        ans = 0;
        vector<vector<int>> dp(n, vector<int>(m, 1));
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                dfs(matrix, dp, i, j);
            }
        }
        return ans;
    }

    int ans, n, m;
    vector<int> dx = {0, 0, -1, 1};
    vector<int> dy = {-1, 1, 0, 0};
};